package br.com.insight.consultoria.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="COHCNTO_LIGS_ETRNGIRAS")
public class ConhecimentoLinguaEstrangeira {
	
	@Embeddable
	public static class IdLinguaEstrangeiraUsuario implements Serializable{
		
		@Transient
		private static final long serialVersionUID = 1L;

		@Column(name="ID_USUARIO")
		private Long usuarioId;
		
		@Column(name="ID_TIPO_ESPECIFICO")
		private Long tipoEspecificoId;
		
		@Column(name="ID_TIPO")
		private Long tipoId;
		
		public IdLinguaEstrangeiraUsuario() {}
		
		public IdLinguaEstrangeiraUsuario(Long usuario,Long tipoEspecifico,Long tipo) {
			this.usuarioId=usuario;
			this.tipoEspecificoId=tipoEspecifico;
			this.tipoId=tipo;
		}
		
		@Override
		public boolean equals(Object o) {
				if(o!=null && o instanceof IdLinguaEstrangeiraUsuario){
					IdLinguaEstrangeiraUsuario idInformaticaUsuario=(IdLinguaEstrangeiraUsuario)o;
					
					return idInformaticaUsuario.usuarioId.equals(this.usuarioId) && 
							idInformaticaUsuario.tipoEspecificoId.equals(this.tipoEspecificoId) &&
							idInformaticaUsuario.tipoId.equals(this.tipoId);
				}else{
					return false;
				}
		}
		
		@Override
		public int hashCode() {
			return this.usuarioId.hashCode()+
			this.tipoEspecificoId.hashCode()+
			this.tipoId.hashCode();
		}
		
	}
	
	@EmbeddedId
	private IdLinguaEstrangeiraUsuario id=new IdLinguaEstrangeiraUsuario();
	
	@ManyToOne
	@JoinColumn(name="ID_USUARIO", insertable=false,updatable=false)
	private Usuario usuario;
	
	@ManyToOne
	@JoinColumn(name="ID_TIPO_ESPECIFICO", insertable=false,updatable=false)
	private TipoEspecifico tipoEspecifico; 
	
	@ManyToOne
	@JoinColumn(name="ID_TIPO",insertable=false,updatable=false)
	private Tipo tipo;
	
	@Column(name="NIVEL_LEITURA")
	private String leitura;
	
	@Column(name="NIVEL_ESCRITA")
	private String escrita;
	
	@Column(name="NIVEL_CONVERSACAO")
	private String conversacao;
	
	public ConhecimentoLinguaEstrangeira() {}
	
	public ConhecimentoLinguaEstrangeira(Usuario usuario,TipoEspecifico tipoEspecifico,Tipo tipo) {
		this.usuario=usuario;
		this.tipoEspecifico=tipoEspecifico;
		this.tipo=tipo;
		
		this.id.usuarioId=usuario.getId();
		this.id.tipoEspecificoId=tipoEspecifico.getId();
		this.id.tipoId=tipo.getId();
	}

	public String getLeitura() {
		return leitura;
	}

	public void setLeitura(String leitura) {
		this.leitura = leitura;
	}

	public String getEscrita() {
		return escrita;
	}

	public void setEscrita(String escrita) {
		this.escrita = escrita;
	}

	public String getConversacao() {
		return conversacao;
	}

	public void setConversacao(String conversacao) {
		this.conversacao = conversacao;
	}

	public IdLinguaEstrangeiraUsuario getId() {
		return id;
	}

	public void setId(IdLinguaEstrangeiraUsuario id) {
		this.id = id;
	}

	public TipoEspecifico getTipoEspecifico() {
		return tipoEspecifico;
	}

	public void setTipoEspecifico(TipoEspecifico tipoEspecifico) {
		this.tipoEspecifico = tipoEspecifico;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Tipo getTipo() {
		return tipo;
	}

	public void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}
	
}
